home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
datelib.exe
/
DIFFDTIM.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-27
|
6KB
|
197 lines
static char diffdtime_prog[] = "@(#)Zeitdifferenzen in Sekunden ermitteln";
static char diffdtime_ver[] = "@(#)v1.00/kr ; 09.06.91";
/* Autor Klaus Rath
**
** Deklaration long diffdtime(char *zeit1, char *zeit2);
**
** Übergabe Erwartet werden 2 Strings in folgenden optionalen Formaten:
** hh:mm[:ss] -- Formate TI_HM_D,TI_HMS_D
** hh.mm[.ss] -- Formate TI_HM_P,TI_HMS_P
** hhmm[ss] -- DDB/4-Formate TI_HM_DB,TI_HMS_DB
** wobei der Trenner ':' oder '.' bestimmt, welches Formatpaar
** in Frage kommt - bzw. Datenbankformat, falls kein Trenner.
** Da die beiden Zeiten einzeln geprüft und konvertiert werden,
** dürfen unterschiedliche Formate verwendet werden!
**
** Rückgabe Zurückgegeben wird die Differenz in Sekunden als long-Wert.
** Da eine Differenz von 0 sec ja durchaus vorkommen kann, eignet
** sich die 0 nicht als Fehlerkennung. diffdtime gibt für diesen
** Fall die Zahl 90909090 zurück, deren normales Zustandekommen
** ziemlich unwahrscheinlich sein dürfte, zumal sich die Zeiten
** z.Zt. alle im Rahmen eines Tages abspielen.
**
** Anmerkung
**
** Änderungen 1.00 ; 09.06.91
** - Erste vollwertige Version
*/
#include <time.h>
#include <string.h>
#include <stdio.h>
#ifdef __TURBOC__
#define ANSI
#define MSDOS
#include <stdlib.h>
#endif
#include "datum.h"
#ifdef ANSI
long diffdtime(char *zeit1, char *zeit2)
#else
long diffdtime(zeit1,zeit2)
char *zeit1;
char *zeit2;
#endif
{
long sekunden_summe1,sekunden_summe2;
long ergebnis;
char h_s1[3],h_s2[3],m_s1[3],m_s2[3],s_s1[3],s_s2[3];
long stunden1,stunden2,minuten1,minuten2,sekunden1,sekunden2;
int laenge1,laenge2;
/* Längenüberprüfung :
*/
laenge1 = strlen(zeit1);
if ( laenge1 == 4 || laenge1 == 5 || laenge1 == 6 || laenge1 == 8 )
;
else
return((long)FEHLER);
laenge2 = strlen(zeit2);
if ( laenge2 == 4 || laenge2 == 5 || laenge2 == 6 || laenge2 == 8)
;
else
return((long)FEHLER);
/* Format überprüfen und umkopieren :
*/
/* 1. Zeit :
*/
if ( ( zeit1[2] == ':' || zeit1[2] == '.' ) &&
( laenge1 == 5 || laenge1 == 8 ) ) {
h_s1[0] = zeit1[0];
h_s1[1] = zeit1[1];
h_s1[2] = '\0';
m_s1[0] = zeit1[3];
m_s1[1] = zeit1[4];
m_s1[2] = '\0';
if ( laenge1 == 8 ) {
s_s1[0] = zeit1[6];
s_s1[1] = zeit1[7];
s_s1[2] = '\0';
}
else if ( laenge1 == 5 ) {
s_s1[0] = '0';
s_s1[1] = '0';
s_s1[2] = '\0';
}
else
return((long)FEHLER);
} /* ENDE: Doppelpunkt- und Punkt-Formate */
else if ( laenge1 == 4 || laenge1 == 6 ) { /* Datenbankformate */
h_s1[0] = zeit1[0];
h_s1[1] = zeit1[1];
h_s1[2] = '\0';
m_s1[0] = zeit1[2];
m_s1[1] = zeit1[3];
m_s1[2] = '\0';
if ( laenge1 == 6 ) {
s_s1[0] = zeit1[4];
s_s1[1] = zeit1[5];
s_s1[2] = '\0';
}
else if ( laenge1 == 4 ) {
s_s1[0] = '0';
s_s1[1] = '0';
s_s1[2] = '\0';
}
else
return((long)FEHLER);
} /* ENDE: Datenbankformate */
else
return((long)FEHLER);
/* ENDE:if(Formatprüfung und Kopierung für 1.Datum) */
/* 2. Zeit :
*/
if ( ( zeit2[2] == ':' || zeit2[2] == '.' ) &&
( laenge2 == 5 || laenge2 == 8 ) ) {
h_s2[0] = zeit2[0];
h_s2[1] = zeit2[1];
h_s2[2] = '\0';
m_s2[0] = zeit2[3];
m_s2[1] = zeit2[4];
m_s2[2] = '\0';
if ( laenge1 == 8 ) {
s_s2[0] = zeit2[6];
s_s2[1] = zeit2[7];
s_s2[2] = '\0';
}
else if ( laenge1 == 5 ) {
s_s2[0] = '0';
s_s2[1] = '0';
s_s2[2] = '\0';
}
else
return((long)FEHLER);
} /* ENDE: Doppelpunkt- und Punkt-Formate */
else if ( laenge2 == 4 || laenge2 == 6 ) { /* Datenbankformate */
h_s1[0] = zeit2[0];
h_s2[1] = zeit2[1];
h_s2[2] = '\0';
m_s2[0] = zeit2[2];
m_s2[1] = zeit2[3];
m_s2[2] = '\0';
if ( laenge1 == 6 ) {
s_s2[0] = zeit2[4];
s_s2[1] = zeit2[5];
s_s2[2] = '\0';
}
else if ( laenge1 == 4 ) {
s_s2[0] = '0';
s_s2[1] = '0';
s_s2[2] = '\0';
}
else
return((long)FEHLER);
} /* ENDE: Datenbankformat */
else
return((long)FEHLER);
/* ENDE:if(Formatprüfung und Kopierung für 2.Datum) */
/* Konvertierung :
*/
stunden1 = atol(h_s1);
minuten1 = atol(m_s1);
sekunden1 = atol(s_s1);
stunden2 = atol(h_s2);
minuten2 = atol(m_s2);
sekunden2 = atol(s_s2);
if ( minuten1 > 59L || minuten1 < 0L || stunden1 > 23L ||stunden1 < 0L ||
sekunden1 > 59L || sekunden1 < 0L ||
minuten2 > 59L || minuten2 < 0L || stunden2 > 23L ||stunden2 < 0L ||
sekunden2 > 59L || sekunden2 < 0L
)
return((long)FEHLER);
sekunden_summe1 = 0L;
sekunden_summe2 = 0L;
/* Stunden, Minuten und Sekunden aufaddieren :
*/
sekunden_summe1 = (long)((stunden1*3600L) + (minuten1*60L) + sekunden1);
sekunden_summe2 = (long)((stunden2*3600L) + (minuten2*60L) + sekunden2);
/* Gesamtergebnis :
*/
ergebnis = sekunden_summe2 -sekunden_summe1;
return(ergebnis);
} /* ENDE: diffdtime() */